[dotnet] Safe modifications of internal log handlers#17334
Conversation
Review Summary by QodoRefactor LogHandlerList with copy-on-write for thread safety
WalkthroughsDescription• Refactored LogHandlerList to use copy-on-write pattern for thread safety • Removed inheritance from List<ILogHandler> for safer handler modifications • Implemented explicit IEnumerable<ILogHandler> to support safe iteration • Added blank line in LogContext.cs for improved readability File Changes1. dotnet/src/webdriver/Internal/Logging/LogHandlerList.cs
|
Code Review by Qodo
|
There was a problem hiding this comment.
Pull request overview
This PR refactors the .NET internal logging handler collection to avoid InvalidOperationException-style issues when handlers are modified during enumeration (copy-on-write snapshotting), and includes a minor formatting tweak.
Changes:
- Refactor
LogHandlerListto stop inheriting fromList<ILogHandler>and use an internal handler array with custom add/remove/clear + enumeration. - Update enumeration to iterate over a stable snapshot of handlers.
- Minor whitespace-only change in
LogContext.cs.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
dotnet/src/webdriver/Internal/Logging/LogHandlerList.cs |
Replaces List<T> inheritance with snapshot-array storage and custom mutation/enumeration methods. |
dotnet/src/webdriver/Internal/Logging/LogContext.cs |
Adds a blank line in the constructor for readability (but currently includes trailing whitespace). |
Updated [Microsoft.AspNetCore.Components.Authorization](https://github.com/dotnet/aspnetcore) from 8.0.26 to 8.0.27. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.Components.Authorization's releases](https://github.com/dotnet/aspnetcore/releases)._ ## 8.0.27 [Release](https://github.com/dotnet/core/releases/tag/v8.0.27) ## What's Changed * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/aspnetcore#66205 * [release/8.0] Update NPM dependencies by @wtgodbe in dotnet/aspnetcore#66052 * [release/8.0] Move off of dead-lettered Windows preview helix queue by @wtgodbe in dotnet/aspnetcore#66220 * [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to `d72f9c8` by @dependabot[bot] in dotnet/aspnetcore#66087 * [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF service connection in mirror-within-azdo by @missymessa in dotnet/aspnetcore#66115 * [release/8.0] Update dependencies from dotnet/source-build-externals by @dotnet-maestro[bot] in dotnet/aspnetcore#66216 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/aspnetcore#66081 * [release/8.0] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro[bot] in dotnet/aspnetcore#66131 * [release/8.0] Update @azure/msal-browser from 2.x to 4.x by @wtgodbe in dotnet/aspnetcore#66236 * [release/8.0] Use source-build-assets repo by @NikolaMilosavljevic in dotnet/aspnetcore#66276 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/aspnetcore#66317 **Full Changelog**: dotnet/aspnetcore@v8.0.26...v8.0.27 Commits viewable in [compare view](dotnet/aspnetcore@v8.0.26...v8.0.27). </details> Updated [Microsoft.AspNetCore.Components.WebAssembly](https://github.com/dotnet/aspnetcore) from 8.0.26 to 8.0.27. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.Components.WebAssembly's releases](https://github.com/dotnet/aspnetcore/releases)._ ## 8.0.27 [Release](https://github.com/dotnet/core/releases/tag/v8.0.27) ## What's Changed * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/aspnetcore#66205 * [release/8.0] Update NPM dependencies by @wtgodbe in dotnet/aspnetcore#66052 * [release/8.0] Move off of dead-lettered Windows preview helix queue by @wtgodbe in dotnet/aspnetcore#66220 * [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to `d72f9c8` by @dependabot[bot] in dotnet/aspnetcore#66087 * [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF service connection in mirror-within-azdo by @missymessa in dotnet/aspnetcore#66115 * [release/8.0] Update dependencies from dotnet/source-build-externals by @dotnet-maestro[bot] in dotnet/aspnetcore#66216 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/aspnetcore#66081 * [release/8.0] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro[bot] in dotnet/aspnetcore#66131 * [release/8.0] Update @azure/msal-browser from 2.x to 4.x by @wtgodbe in dotnet/aspnetcore#66236 * [release/8.0] Use source-build-assets repo by @NikolaMilosavljevic in dotnet/aspnetcore#66276 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/aspnetcore#66317 **Full Changelog**: dotnet/aspnetcore@v8.0.26...v8.0.27 Commits viewable in [compare view](dotnet/aspnetcore@v8.0.26...v8.0.27). </details> Updated [Microsoft.AspNetCore.Components.WebAssembly.DevServer](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.Components.WebAssembly.DevServer's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.AspNetCore.Http.Abstractions](https://github.com/dotnet/aspnetcore) from 2.3.9 to 2.3.10. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.Http.Abstractions's releases](https://github.com/dotnet/aspnetcore/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/aspnetcore/commits). </details> Updated [Microsoft.AspNetCore.Mvc.Testing](https://github.com/dotnet/aspnetcore) from 8.0.26 to 8.0.27. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.Mvc.Testing's releases](https://github.com/dotnet/aspnetcore/releases)._ ## 8.0.27 [Release](https://github.com/dotnet/core/releases/tag/v8.0.27) ## What's Changed * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/aspnetcore#66205 * [release/8.0] Update NPM dependencies by @wtgodbe in dotnet/aspnetcore#66052 * [release/8.0] Move off of dead-lettered Windows preview helix queue by @wtgodbe in dotnet/aspnetcore#66220 * [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to `d72f9c8` by @dependabot[bot] in dotnet/aspnetcore#66087 * [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF service connection in mirror-within-azdo by @missymessa in dotnet/aspnetcore#66115 * [release/8.0] Update dependencies from dotnet/source-build-externals by @dotnet-maestro[bot] in dotnet/aspnetcore#66216 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/aspnetcore#66081 * [release/8.0] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro[bot] in dotnet/aspnetcore#66131 * [release/8.0] Update @azure/msal-browser from 2.x to 4.x by @wtgodbe in dotnet/aspnetcore#66236 * [release/8.0] Use source-build-assets repo by @NikolaMilosavljevic in dotnet/aspnetcore#66276 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/aspnetcore#66317 **Full Changelog**: dotnet/aspnetcore@v8.0.26...v8.0.27 Commits viewable in [compare view](dotnet/aspnetcore@v8.0.26...v8.0.27). </details> Updated [Microsoft.AspNetCore.OpenApi](https://github.com/dotnet/aspnetcore) from 8.0.26 to 8.0.27. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.OpenApi's releases](https://github.com/dotnet/aspnetcore/releases)._ ## 8.0.27 [Release](https://github.com/dotnet/core/releases/tag/v8.0.27) ## What's Changed * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/aspnetcore#66205 * [release/8.0] Update NPM dependencies by @wtgodbe in dotnet/aspnetcore#66052 * [release/8.0] Move off of dead-lettered Windows preview helix queue by @wtgodbe in dotnet/aspnetcore#66220 * [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to `d72f9c8` by @dependabot[bot] in dotnet/aspnetcore#66087 * [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF service connection in mirror-within-azdo by @missymessa in dotnet/aspnetcore#66115 * [release/8.0] Update dependencies from dotnet/source-build-externals by @dotnet-maestro[bot] in dotnet/aspnetcore#66216 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/aspnetcore#66081 * [release/8.0] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro[bot] in dotnet/aspnetcore#66131 * [release/8.0] Update @azure/msal-browser from 2.x to 4.x by @wtgodbe in dotnet/aspnetcore#66236 * [release/8.0] Use source-build-assets repo by @NikolaMilosavljevic in dotnet/aspnetcore#66276 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/aspnetcore#66317 **Full Changelog**: dotnet/aspnetcore@v8.0.26...v8.0.27 Commits viewable in [compare view](dotnet/aspnetcore@v8.0.26...v8.0.27). </details> Updated [Microsoft.EntityFrameworkCore](https://github.com/dotnet/efcore) from 9.0.15 to 9.0.16. <details> <summary>Release notes</summary> _Sourced from [Microsoft.EntityFrameworkCore's releases](https://github.com/dotnet/efcore/releases)._ ## 9.0.16 [Release](https://github.com/dotnet/core/releases/tag/v9.0.16) ## What's Changed * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#37900 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#37969 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38034 * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/efcore#38062 * [release/9.0] Update branding to 9.0.16 by @vseanreesermsft in dotnet/efcore#38063 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38053 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#37908 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#38099 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#38101 * Merging internal commits for release/9.0 by @vseanreesermsft in dotnet/efcore#38098 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38170 **Full Changelog**: dotnet/efcore@v9.0.15...v9.0.16 Commits viewable in [compare view](dotnet/efcore@v9.0.15...v9.0.16). </details> Updated [Microsoft.EntityFrameworkCore.Design](https://github.com/dotnet/efcore) from 9.0.15 to 9.0.16. <details> <summary>Release notes</summary> _Sourced from [Microsoft.EntityFrameworkCore.Design's releases](https://github.com/dotnet/efcore/releases)._ ## 9.0.16 [Release](https://github.com/dotnet/core/releases/tag/v9.0.16) ## What's Changed * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#37900 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#37969 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38034 * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/efcore#38062 * [release/9.0] Update branding to 9.0.16 by @vseanreesermsft in dotnet/efcore#38063 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38053 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#37908 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#38099 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#38101 * Merging internal commits for release/9.0 by @vseanreesermsft in dotnet/efcore#38098 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38170 **Full Changelog**: dotnet/efcore@v9.0.15...v9.0.16 Commits viewable in [compare view](dotnet/efcore@v9.0.15...v9.0.16). </details> Updated [Microsoft.EntityFrameworkCore.InMemory](https://github.com/dotnet/efcore) from 9.0.15 to 9.0.16. <details> <summary>Release notes</summary> _Sourced from [Microsoft.EntityFrameworkCore.InMemory's releases](https://github.com/dotnet/efcore/releases)._ ## 9.0.16 [Release](https://github.com/dotnet/core/releases/tag/v9.0.16) ## What's Changed * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#37900 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#37969 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38034 * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/efcore#38062 * [release/9.0] Update branding to 9.0.16 by @vseanreesermsft in dotnet/efcore#38063 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38053 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#37908 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#38099 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#38101 * Merging internal commits for release/9.0 by @vseanreesermsft in dotnet/efcore#38098 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38170 **Full Changelog**: dotnet/efcore@v9.0.15...v9.0.16 Commits viewable in [compare view](dotnet/efcore@v9.0.15...v9.0.16). </details> Updated [Microsoft.EntityFrameworkCore.Relational](https://github.com/dotnet/efcore) from 9.0.15 to 9.0.16. <details> <summary>Release notes</summary> _Sourced from [Microsoft.EntityFrameworkCore.Relational's releases](https://github.com/dotnet/efcore/releases)._ ## 9.0.16 [Release](https://github.com/dotnet/core/releases/tag/v9.0.16) ## What's Changed * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#37900 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#37969 * [release/8.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38034 * [release/8.0] Update branding to 8.0.27 by @vseanreesermsft in dotnet/efcore#38062 * [release/9.0] Update branding to 9.0.16 by @vseanreesermsft in dotnet/efcore#38063 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38053 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#37908 * Merging internal commits for release/8.0 by @vseanreesermsft in dotnet/efcore#38099 * [automated] Merge branch 'release/8.0' => 'release/9.0' by @github-actions[bot] in dotnet/efcore#38101 * Merging internal commits for release/9.0 by @vseanreesermsft in dotnet/efcore#38098 * [release/9.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/efcore#38170 **Full Changelog**: dotnet/efcore@v9.0.15...v9.0.16 Commits viewable in [compare view](dotnet/efcore@v9.0.15...v9.0.16). </details> Updated [Microsoft.Extensions.Caching.Abstractions](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Caching.Abstractions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.Binder](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.Binder's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Hosting](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Hosting's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Http](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Http's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Options.DataAnnotations](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Options.DataAnnotations's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Selenium.Support](https://github.com/SeleniumHQ/selenium) from 4.43.0 to 4.44.0. <details> <summary>Release notes</summary> _Sourced from [Selenium.Support's releases](https://github.com/SeleniumHQ/selenium/releases)._ ## 4.44.0 ## Detailed Changelogs by Component <img src="https://www.selenium.dev/images/programming/java.svg" width="20" height="20"> **[Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)** | <img src="https://www.selenium.dev/images/programming/python.svg" width="20" height="20"> **[Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)** | <img src="https://www.selenium.dev/images/programming/dotnet.svg" width="20" height="20"> **[DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)** | <img src="https://www.selenium.dev/images/programming/ruby.svg" width="20" height="20"> **[Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)** | <img src="https://www.selenium.dev/images/programming/javascript.svg" width="20" height="20"> **[JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md)** <br> <!-- Release notes generated using configuration in .github/release.yml at da2039bd1456a161d0c284de16f9f4f179f1e8ca --> ## What's Changed <details> <summary>Click to see all the changes included in this release</summary> * fix(documentation): update artifact naming for generated docs by @diemol in SeleniumHQ/selenium#17332 * fix(ruby): retrieve devtools version dynamically for package verification by @diemol in SeleniumHQ/selenium#17335 * [dotnet] Don't truncate internal log messages at error/warn levels by @nvborisenko in SeleniumHQ/selenium#17333 * [dotnet] Safe modifications of internal log handlers by @nvborisenko in SeleniumHQ/selenium#17334 * [dotnet] Remove planned obsoleted members for 4.44 by @nvborisenko in SeleniumHQ/selenium#17328 * [dotnet] [bidi] Statically declare commands by @nvborisenko in SeleniumHQ/selenium#17330 * [dotnet] [bidi] Statically declared events by @nvborisenko in SeleniumHQ/selenium#17331 * [dotnet] Add C# 14 extension to polyfill `ArgumentNullException.ThrowIfNull` by @RenderMichael in SeleniumHQ/selenium#16697 * [dotnet] [bidi] Align SetDownloadBehavior command by @nvborisenko in SeleniumHQ/selenium#17336 * [dotnet] [bidi] Align ContinueWithAuth command by @nvborisenko in SeleniumHQ/selenium#17337 * [dotnet] [bidi] Align SetGeolocation polymorphic command by @nvborisenko in SeleniumHQ/selenium#17338 * [dotnet] [test] In-process test webserver by @nvborisenko in SeleniumHQ/selenium#17339 * [java] deprecate the 'native' methods inside the HttpClient interface by @joerg1985 in SeleniumHQ/selenium#17340 * CDDL 2 Python generator by @AutomatedTester in SeleniumHQ/selenium#16914 * Fix py:local_dev rake task by @cgoldberg in SeleniumHQ/selenium#17342 * [grid] Accept legacy session-closed event payloads by @VietND96 in SeleniumHQ/selenium#17343 * [java] specify nullability in package `org.openqa.selenium.remote` by @asolntsev in SeleniumHQ/selenium#17325 * fix NPE when response status is null by @asolntsev in SeleniumHQ/selenium#17348 * [java] fix NoSuchElementException for custom By locators by @Chandan25sharma in SeleniumHQ/selenium#17287 * [py] Update docs with pytest example and minor formatting fixes by @cgoldberg in SeleniumHQ/selenium#17351 * [dotnet] Fix stopping of network monitoring via DevTools by @nvborisenko in SeleniumHQ/selenium#17352 * [dotnet] [test] Update tests to target .NET 10 by @nvborisenko in SeleniumHQ/selenium#17353 * [build] Clean extra tools from GHA runner to free disk space by @cgoldberg in SeleniumHQ/selenium#17360 * Initial Creation of the Selenium CLI Tool by @AutomatedTester in SeleniumHQ/selenium#17327 * [java] fix some nullability warnings by @asolntsev in SeleniumHQ/selenium#17362 * [py] Use generated Bidi files instead of hand curated ones by @AutomatedTester in SeleniumHQ/selenium#17266 * [docs] Add AI-assisted contribution policy by @titusfortner in SeleniumHQ/selenium#17043 * [Agents] Update agents to make sure do linting. by @AutomatedTester in SeleniumHQ/selenium#17366 * [py] Bump dependencies by @cgoldberg in SeleniumHQ/selenium#17368 * [git] update gitignore to exclude mempalace by @AutomatedTester in SeleniumHQ/selenium#17369 * [java] remove field `ChromiumDriver.capabilities` by @asolntsev in SeleniumHQ/selenium#17363 * [spec] Use http_file for the cddl files by @AutomatedTester in SeleniumHQ/selenium#17372 * [dotnet] [bidi] Obsolete Type(string) method in Input module by @nvborisenko in SeleniumHQ/selenium#17377 * Fix Network failures by @AutomatedTester in SeleniumHQ/selenium#17381 * [java] [test] Unignore bidi network conditions tests for Firefox by @nvborisenko in SeleniumHQ/selenium#17385 * [dotnet] [test] Unignore network conditions tests for Firefox by @nvborisenko in SeleniumHQ/selenium#17386 * [dotnet] [test] Migrate to MTP by @nvborisenko in SeleniumHQ/selenium#17384 * [dotnet] Support `UnhandledPromptBehavior` option as string and map (breaking change) by @nvborisenko in SeleniumHQ/selenium#16557 ... (truncated) Commits viewable in [compare view](SeleniumHQ/selenium@selenium-4.43.0...selenium-4.44.0). </details> Updated [Selenium.WebDriver](https://github.com/SeleniumHQ/selenium) from 4.43.0 to 4.44.0. <details> <summary>Release notes</summary> _Sourced from [Selenium.WebDriver's releases](https://github.com/SeleniumHQ/selenium/releases)._ ## 4.44.0 ## Detailed Changelogs by Component <img src="https://www.selenium.dev/images/programming/java.svg" width="20" height="20"> **[Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)** | <img src="https://www.selenium.dev/images/programming/python.svg" width="20" height="20"> **[Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)** | <img src="https://www.selenium.dev/images/programming/dotnet.svg" width="20" height="20"> **[DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)** | <img src="https://www.selenium.dev/images/programming/ruby.svg" width="20" height="20"> **[Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)** | <img src="https://www.selenium.dev/images/programming/javascript.svg" width="20" height="20"> **[JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md)** <br> <!-- Release notes generated using configuration in .github/release.yml at da2039bd1456a161d0c284de16f9f4f179f1e8ca --> ## What's Changed <details> <summary>Click to see all the changes included in this release</summary> * fix(documentation): update artifact naming for generated docs by @diemol in SeleniumHQ/selenium#17332 * fix(ruby): retrieve devtools version dynamically for package verification by @diemol in SeleniumHQ/selenium#17335 * [dotnet] Don't truncate internal log messages at error/warn levels by @nvborisenko in SeleniumHQ/selenium#17333 * [dotnet] Safe modifications of internal log handlers by @nvborisenko in SeleniumHQ/selenium#17334 * [dotnet] Remove planned obsoleted members for 4.44 by @nvborisenko in SeleniumHQ/selenium#17328 * [dotnet] [bidi] Statically declare commands by @nvborisenko in SeleniumHQ/selenium#17330 * [dotnet] [bidi] Statically declared events by @nvborisenko in SeleniumHQ/selenium#17331 * [dotnet] Add C# 14 extension to polyfill `ArgumentNullException.ThrowIfNull` by @RenderMichael in SeleniumHQ/selenium#16697 * [dotnet] [bidi] Align SetDownloadBehavior command by @nvborisenko in SeleniumHQ/selenium#17336 * [dotnet] [bidi] Align ContinueWithAuth command by @nvborisenko in SeleniumHQ/selenium#17337 * [dotnet] [bidi] Align SetGeolocation polymorphic command by @nvborisenko in SeleniumHQ/selenium#17338 * [dotnet] [test] In-process test webserver by @nvborisenko in SeleniumHQ/selenium#17339 * [java] deprecate the 'native' methods inside the HttpClient interface by @joerg1985 in SeleniumHQ/selenium#17340 * CDDL 2 Python generator by @AutomatedTester in SeleniumHQ/selenium#16914 * Fix py:local_dev rake task by @cgoldberg in SeleniumHQ/selenium#17342 * [grid] Accept legacy session-closed event payloads by @VietND96 in SeleniumHQ/selenium#17343 * [java] specify nullability in package `org.openqa.selenium.remote` by @asolntsev in SeleniumHQ/selenium#17325 * fix NPE when response status is null by @asolntsev in SeleniumHQ/selenium#17348 * [java] fix NoSuchElementException for custom By locators by @Chandan25sharma in SeleniumHQ/selenium#17287 * [py] Update docs with pytest example and minor formatting fixes by @cgoldberg in SeleniumHQ/selenium#17351 * [dotnet] Fix stopping of network monitoring via DevTools by @nvborisenko in SeleniumHQ/selenium#17352 * [dotnet] [test] Update tests to target .NET 10 by @nvborisenko in SeleniumHQ/selenium#17353 * [build] Clean extra tools from GHA runner to free disk space by @cgoldberg in SeleniumHQ/selenium#17360 * Initial Creation of the Selenium CLI Tool by @AutomatedTester in SeleniumHQ/selenium#17327 * [java] fix some nullability warnings by @asolntsev in SeleniumHQ/selenium#17362 * [py] Use generated Bidi files instead of hand curated ones by @AutomatedTester in SeleniumHQ/selenium#17266 * [docs] Add AI-assisted contribution policy by @titusfortner in SeleniumHQ/selenium#17043 * [Agents] Update agents to make sure do linting. by @AutomatedTester in SeleniumHQ/selenium#17366 * [py] Bump dependencies by @cgoldberg in SeleniumHQ/selenium#17368 * [git] update gitignore to exclude mempalace by @AutomatedTester in SeleniumHQ/selenium#17369 * [java] remove field `ChromiumDriver.capabilities` by @asolntsev in SeleniumHQ/selenium#17363 * [spec] Use http_file for the cddl files by @AutomatedTester in SeleniumHQ/selenium#17372 * [dotnet] [bidi] Obsolete Type(string) method in Input module by @nvborisenko in SeleniumHQ/selenium#17377 * Fix Network failures by @AutomatedTester in SeleniumHQ/selenium#17381 * [java] [test] Unignore bidi network conditions tests for Firefox by @nvborisenko in SeleniumHQ/selenium#17385 * [dotnet] [test] Unignore network conditions tests for Firefox by @nvborisenko in SeleniumHQ/selenium#17386 * [dotnet] [test] Migrate to MTP by @nvborisenko in SeleniumHQ/selenium#17384 * [dotnet] Support `UnhandledPromptBehavior` option as string and map (breaking change) by @nvborisenko in SeleniumHQ/selenium#16557 ... (truncated) Commits viewable in [compare view](SeleniumHQ/selenium@selenium-4.43.0...selenium-4.44.0). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Make is safe to modify log handlers while iterating.
💥 What does this PR do?
This pull request refactors the
LogHandlerListclass to improve its internal implementation and thread safety. The class no longer inherits fromList<ILogHandler>, and now manages its own internal array of handlers. This change also updates how handlers are added, removed, and enumerated, ensuring a more robust and maintainable design.LogHandlerList refactoring and improvements:
LogHandlerListto no longer inherit fromList<ILogHandler>, instead implementing its own internal storage with a volatile array for thread safety.Add,Remove, andClearmethods to operate on the internal_handlersarray, removing use of base class methods and ensuring modifications are thread-safe.IEnumerable<ILogHandler>explicitly to allow enumeration over the internal array of handlers.using System.Collections;to support the new enumeration implementation.Minor code style improvement:
LogContext.csfor improved readability.🔧 Implementation Notes
Copy-on-write approach to achieve immutability internally.
🔄 Types of changes